Skip to content

Cut a beta for code-only changes, and warn when nothing cuts - #5

Merged
sarensw merged 1 commit into
mainfrom
fix-plan-beta-silent-skip
Aug 6, 2026
Merged

Cut a beta for code-only changes, and warn when nothing cuts#5
sarensw merged 1 commit into
mainfrom
fix-plan-beta-silent-skip

Conversation

@sarensw

@sarensw sarensw commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

A push that changes only source cuts no beta, skips every job, and finishes green — the fix sits unshipped on main with nothing saying so.

##[notice]framebison: unchanged since v1.0-beta.4 — skip
has-any = false

Cause

plan-beta gated re-cutting solely on whether Config/products/<id>.json differed from the last beta tag. Nothing about the commit range was consulted — whether the code changed had no bearing on whether a build shipped.

Defensible for multi-product repos (a push touching A shouldn't re-cut B and C, and the changelog lives in the product file). It breaks down for single-product repos and for fixes warranting no release note. On framebison it forced a changelog edit three times, one a wasted cycle: a merged PR that shipped nothing, found only by reading the run.

Changes

source-paths — optional per-product git pathspecs the product builds from:

"source-paths": ["FrameBison/**", "Project.swift"],

A change to any of them cuts a beta on its own. Multi-product isolation is preserved. Internal only — stripped before the record reaches the workflow matrix.

Skip becomes a warning. ::notice::::warning::, and without source-paths it names the remedy. The run stays green either way, so the silence was the real harm.

Backward compatible: products without source-paths behave exactly as before, plus a warning.

Tests

Both paths run against real git repos with real diffs, not the CHANGED_PRODUCTS stub — so they exercise the code that actually runs in CI:

  ok  : code-only change WITH source-paths → cuts beta.2
  ok  : source-paths stays internal — not emitted to the workflow matrix
  ok  : code-only change WITHOUT source-paths → nothing cuts
  ok  : the silent skip is now a warning naming the fix

Full suite green, actionlint clean.

Closes #4

A push that changed only source cut no beta, skipped every job, and the
run finished green — the fix sat unshipped on main with nothing saying so.

plan-beta gated re-cutting solely on whether Config/products/<id>.json
differed from the last beta tag, so whether the code changed had no
bearing on whether a build shipped. On framebison that forced a changelog
edit three times, one of them a wasted cycle: a merged PR that shipped
nothing, found only by reading the run.

Add an optional per-product source-paths: git pathspecs the product
builds from. A change to any of them now cuts a beta on its own, which
keeps multi-product isolation (a push touching product A still does not
re-cut B and C) while removing the false negative.

Promote the skip notice to a warning, and when source-paths is absent
name the remedy in it. The run stays green either way, so the silence was
the real harm.

Backward compatible: products without source-paths behave exactly as
before, plus the warning.

tests/run.sh covers both paths against real git repos with real diffs
rather than the CHANGED_PRODUCTS stub, so it exercises the code that
actually runs in CI.

Closes #4
@sarensw sarensw closed this Aug 6, 2026
@sarensw sarensw reopened this Aug 6, 2026
@sarensw
sarensw merged commit acbe008 into main Aug 6, 2026
sarensw added a commit that referenced this pull request Aug 6, 2026
selftest was the last ubuntu-latest job in the repo, and also the only
workflow that stopped dispatching: no run for PRs #3 or #5, none for
either merge to main, zero check runs created, and reopening a PR to
re-fire pull_request changed nothing. Every self-hosted job kept running
throughout.

GitHub-hosted runners are a separate capacity and billing path from our
own, so a block there takes out exactly this job and nothing else. The
correlation is one-to-one: the only hosted job is the only broken one.

Nothing here needs Linux — actionlint ships a darwin build and the tests
are offline python3 plus git.

Install actionlint into RUNNER_TEMP rather than the workspace. A
self-hosted runner reuses its checkout, so ./actionlint would otherwise
sit untracked in the working tree between runs.

Also drop two comments left stale by v0.4.7, which moved every job to
self-hosted but kept describing the prepare jobs as running on ubuntu.
Comment-only, so callers are unaffected and no new tag is needed;
selftest is not a reusable workflow, so no pin changes either.

Closes #6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

plan-beta ships nothing for code-only changes, and reports success

1 participant